assume cs:code, ds:data

data segment
    db 'welcome to masm!', 0
data ends

code segment

start:  mov dh, 8   ; 行号
        mov dl, 3   ; 列号
        mov cl, 3   ; 颜色
        mov ax, data
        mov ds, ax
        mov si, 0
        call show_str

        mov ax, 4c00H
        int 21H
show_str:   ; 设置目标内存的位置
            mov ax, 0B800H
            mov es, ax
            ; 处理行坐标
            mov ax, 0
            mov al, 160
            mul dh
            mov bx, ax
            ; 处理列坐标
            mov ax, 0
            mov al, 2
            mul dl
            add ax, bx
            ; 显示
            mov di, ax          ; 将行坐标和列坐标的和放置到di寄存器中
            mov ah, cl          ; 目的是空出cx寄存器, 并且改变字体颜色
            mov cx, 0
show_full:  mov al, ds:[si]     ; 在此处开始循环
            mov cl, al
            jcxz ok             ; 倘若cx寄存器值为0，循环结束
            mov es:[di], ax
            inc si
            add di, 2
            jmp show_full
ok:         ret     ; 函数返回

code ends
end start